package org.shellex.javame.utility;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;

public class IOWrapper {
	static IOWrapper instance;

	private IOWrapper() {
	};

	public static IOWrapper getInstance() {
		if (instance == null)
			instance = new IOWrapper();
		return instance;
	}

	public String read_res_UTF(String name) {
		String strReturn = "";
		InputStream in = null;
		byte[] word_utf = new byte[10240];
		try {
			in = getClass().getResourceAsStream(name);
			in.read(word_utf);
			in.close();
			strReturn = new String(word_utf, "UTF-8");
		} catch (Exception e) {
			System.out.println("readUTF Error:" + e.toString());
		} finally {
			in = null;
		}
		return strReturn;
	}

	public String read_file(String filepath) {
		byte data[] = null;
		try {
			FileConnection fc = (FileConnection) Connector.open(filepath);
			DataInputStream dis = fc.openDataInputStream();

			/** ********************************************************** */
			int ch;// 每次读出的数据
			int index = 0;// 读取的数据的总索引
			int len = 1024;// 放数据的空间不够时，每次扩充空间的大小为1024字节
			byte buf[];// 暂时存放从data[]拷贝出来的数据
			data = new byte[len];// 先初步设定一个1k的内存空间
			while ((ch = dis.read()) != -1) {
				data[index] = (byte) ch;
				index++;
				if (index >= len) {
					len += 1024;
					buf = new byte[len];
					System.arraycopy(data, 0, buf, 0, index);
					data = null;
					data = buf;
				}
			}
			// 此时data[]的长度可能要比实际数据多，最后的一些字节可能是一些无效的数据，去掉无效数据
			if ((index % 1024) != 0) {
				buf = new byte[index];// index的值是数据的实际大小
				System.arraycopy(data, 0, buf, 0, index);
				data = null;
				data = buf;
			}

			if (dis != null) {
				dis.close();
				dis = null;
			}
			if (fc != null) {
				fc.close();
				fc = null;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		return new String(data);
	}

}
